--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / components / tools / ReticulumConfigEditorPage.vue
Displaying Raw • Download
meshchatx/src/frontend/components/tools/ReticulumConfigEditorPage.vue b27028a7fbdb9530f658ad1661824944e16e70bf (b27028a7) Text, 11.67 KB
T8b949e<!-- SPDX-License-Identifier: 0BSD -->
Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col flex-1 overflow-hidden min-w-0 bg-slate-50 dark:bg-zinc-950"Tb4b4b4>
Tb4b4b4<Tff7b72ToolsPageHeader
Te6edf3iconTff7b72=Ta5d6ff"file-cog"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'tools.reticulum_config_editor.title'Tb4b4b4)Ta5d6ff"
Tb4b4b4:Te6edf3descriptionTff7b72=Ta5d6ff"Te6edf3$tTb4b4b4(Ta5d6ff'tools.reticulum_config_editor.description'Tb4b4b4)Ta5d6ff"
Te6edf3accentTff7b72=Ta5d6ff"blue"
Tb4b4b4>
Tb4b4b4<Tff7b72template #Te6edf3actionsTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3typeTff7b72=Ta5d6ff"button" Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-1! px-3!" Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Te6edf3loadingTa5d6ff" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3loadConfigTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"refresh" Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"hidden sm:inline"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.reload"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-1! px-3! text-red-500! hover:bg-red-50! dark:hover:bg-red-900/20!"
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Te6edf3loading Tff7b72|| Te6edf3resettingTa5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3restoreDefaultsTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"restore" Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"hidden sm:inline"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.restore_defaults"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-1! px-3!"
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Tff7b72!Te6edf3isDirty Tff7b72|| Te6edf3savingTa5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3discardChangesTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"undo" Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"hidden sm:inline"Tb4b4b4>Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.discard"Tb4b4b4) Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"primary-chip py-1! px-3!"
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Tff7b72!Te6edf3isDirty Tff7b72|| Te6edf3savingTa5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3saveConfigTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"content-save" Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"hidden sm:inline"Tb4b4b4>Tff7b72{{
Te6edf3saving Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.saving"Tb4b4b4) Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.save"Tb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ToolsPageHeaderTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex-1 overflow-y-auto overflow-x-hidden w-full px-3 sm:px-5 py-4 pb-[max(1rem,env(safe-area-inset-bottom))]"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4 w-full min-w-0 max-w-6xl mx-auto"Tb4b4b4>
Tb4b4b4<Tff7b72p
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3configPathTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-gray-400 font-mono truncate"
Tb4b4b4:Te6edf3titleTff7b72=Ta5d6ff"Te6edf3configPathTa5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3configPath Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3showRestartReminderTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"bg-amber-600 text-white border border-amber-500/30 p-4 sm:rounded-xl flex flex-wrap gap-3 items-center"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"alert" Te6edf3classTff7b72=Ta5d6ff"w-6 h-6" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-lg font-semibold"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.restart_required"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.restart_description"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"ml-auto inline-flex items-center gap-2 rounded-full bg-white px-4 py-1.5 text-sm font-bold text-amber-600 hover:bg-white/90 transition shadow-xs disabled:opacity-50"
Tb4b4b4:Te6edf3disabledTff7b72=Ta5d6ff"Te6edf3reloadingRnsTa5d6ff"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3reloadingRns Tff7b72? Ta5d6ff'' Tff7b72: Ta5d6ff'animate-pulse motion-reduce:animate-none'Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3reloadRnsTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"restart" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3reloadingRns Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff"app.reloading_rns"Tb4b4b4) Tff7b72: Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.restart_now"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"rounded-xl border border-gray-200 dark:border-zinc-800 bg-white dark:bg-zinc-900 overflow-hidden"
Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap items-center justify-between gap-2 px-3 py-2 border-b border-gray-200 dark:border-zinc-800 bg-gray-50 dark:bg-zinc-900/60 text-xs text-gray-600 dark:text-gray-300"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-1.5"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"information-outline" Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5" Tb4b4b4/Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.info"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3isDirtyTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"text-amber-600 dark:text-amber-400 font-semibold"Tb4b4b4>
Tff7b72{{ Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.unsaved"Tb4b4b4) Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72textarea
Te6edf3refTff7b72=Ta5d6ff"editorRef"
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3contentTa5d6ff"
Te6edf3spellcheckTff7b72=Ta5d6ff"false"
Te6edf3autocapitalizeTff7b72=Ta5d6ff"off"
Te6edf3autocompleteTff7b72=Ta5d6ff"off"
Te6edf3autocorrectTff7b72=Ta5d6ff"off"
Tb4b4b4:Te6edf3placeholderTff7b72=Ta5d6ff"Te6edf3loading Tff7b72? Te6edf3$tTb4b4b4(Ta5d6ff'tools.reticulum_config_editor.loading'Tb4b4b4) Tff7b72: Ta5d6ff''Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"w-full bg-white dark:bg-zinc-900 text-gray-900 dark:text-white p-4 font-mono text-xs sm:text-sm resize-none focus:outline-hidden min-h-[420px] sm:min-h-[60vh]"
Tb4b4b4@Te6edf3keydownTb4b4b4.Te6edf3tabTb4b4b4.Te6edf3preventTff7b72=Ta5d6ff"Te6edf3insertTabTa5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72textareaTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Te6edf3MaterialDesignIcon Tff7b72from Ta5d6ff"../MaterialDesignIcon.vue"Tb4b4b4;
Tff7b72import Te6edf3ToastUtils Tff7b72from Ta5d6ff"../../js/ToastUtils"Tb4b4b4;
Tff7b72import Te6edf3DialogUtils Tff7b72from Ta5d6ff"../../js/DialogUtils"Tb4b4b4;
Tff7b72import Te6edf3GlobalState Tff7b72from Ta5d6ff"../../js/GlobalState"Tb4b4b4;
Tff7b72import Te6edf3ToolsPageHeader Tff7b72from Ta5d6ff"./ToolsPageHeader.vue"Tb4b4b4;
Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"ReticulumConfigEditorPage"Tb4b4b4,
Te6edf3componentsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTb4b4b4,
Te6edf3ToolsPageHeaderTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3beforeRouteLeaveTb4b4b4(Te6edf3toTb4b4b4, Tff7b72fromTb4b4b4, Te6edf3nextTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isDirtyTb4b4b4) Tb4b4b4{
Te6edf3nextTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72returnTb4b4b4;
Tb4b4b4}
Te6edf3DialogUtilsTb4b4b4.Te6edf3confirmTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.confirm_leave"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3thenTb4b4b4(Tb4b4b4(Te6edf3okTb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3nextTb4b4b4(Tff7b72!Tff7b72!Te6edf3okTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3contentTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3originalContentTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3configPathTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3loadingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3savingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3resettingTff7b72: Tff7b72falseTb4b4b4,
Te6edf3reloadingRnsTff7b72: Tff7b72falseTb4b4b4,
Te6edf3hasSavedChangesTff7b72: Tff7b72falseTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3computedTff7b72: Tb4b4b4{
Te6edf3isDirtyTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3content Tff7b72!== Tff7b72thisTb4b4b4.Te6edf3originalContentTb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3showRestartReminderTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72thisTb4b4b4.Te6edf3hasSavedChanges Tff7b72|| Te6edf3GlobalStateTb4b4b4.Te6edf3hasPendingInterfaceChangesTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadConfigTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Tff7b72async Te6edf3loadConfigTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3loadingTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3loading Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/reticulum/config/raw"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3content Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3content Tff7b72|| Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3originalContent Tff7b72= Tff7b72thisTb4b4b4.Te6edf3contentTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3configPath Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3path Tff7b72|| Ta5d6ff""Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3error Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.failed_load"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3loading Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3saveConfigTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3saving Tff7b72|| Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isDirtyTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3saving Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3loadingTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.saving"Tb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4, Ta5d6ff"rns-config-save"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3putTb4b4b4(Ta5d6ff"/api/v1/reticulum/config/raw"Tb4b4b4, Tb4b4b4{
Te6edf3contentTff7b72: Tff7b72thisTb4b4b4.Te6edf3contentTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3originalContent Tff7b72= Tff7b72thisTb4b4b4.Te6edf3contentTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3configPath Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3path Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3configPathTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3hasSavedChanges Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3GlobalStateTb4b4b4.Te6edf3hasPendingInterfaceChanges Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3message Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.saved"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3error Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.failed_save"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3dismissTb4b4b4(Ta5d6ff"rns-config-save"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3saving Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3restoreDefaultsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3resettingTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3confirmed Tff7b72= Tff7b72await Te6edf3DialogUtilsTb4b4b4.Te6edf3confirmTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.confirm_restore"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3confirmedTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3resetting Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3loadingTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.restoring"Tb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4, Ta5d6ff"rns-config-restore"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/reticulum/config/reset"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3content Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3content Tff7b72|| Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3originalContent Tff7b72= Tff7b72thisTb4b4b4.Te6edf3contentTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3configPath Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3path Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3configPathTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3hasSavedChanges Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3GlobalStateTb4b4b4.Te6edf3hasPendingInterfaceChanges Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3message Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.restored"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3error Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.failed_restore"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3dismissTb4b4b4(Ta5d6ff"rns-config-restore"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3resetting Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3discardChangesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3isDirtyTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3content Tff7b72= Tff7b72thisTb4b4b4.Te6edf3originalContentTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3reloadRnsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3reloadingRnsTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3reloadingRns Tff7b72= Tff7b72trueTb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3loadingTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"app.reloading_rns"Tb4b4b4)Tb4b4b4, T79c0ff0Tb4b4b4, Ta5d6ff"rns-config-reload"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/reticulum/reload"Tb4b4b4)Tb4b4b4;
Te6edf3ToastUtilsTb4b4b4.Te6edf3successTb4b4b4(Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3message Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.restart_done"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3hasSavedChanges Tff7b72= Tff7b72falseTb4b4b4;
Te6edf3GlobalStateTb4b4b4.Te6edf3hasPendingInterfaceChanges Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3GlobalStateTb4b4b4.Te6edf3modifiedInterfaceNamesTff7b72?Tb4b4b4.Te6edf3clearTb4b4b4) Tb4b4b4{
Te6edf3GlobalStateTb4b4b4.Te6edf3modifiedInterfaceNamesTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadConfigTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3errorTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3error Tff7b72|| Tff7b72thisTb4b4b4.Te6edf3$tTb4b4b4(Ta5d6ff"tools.reticulum_config_editor.failed_restart"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Te6edf3ToastUtilsTb4b4b4.Te6edf3dismissTb4b4b4(Ta5d6ff"rns-config-reload"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3reloadingRns Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3insertTabTb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3target Tff7b72= Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4;
Tff7b72const Te6edf3start Tff7b72= Te6edf3targetTb4b4b4.Te6edf3selectionStartTb4b4b4;
Tff7b72const Te6edf3end Tff7b72= Te6edf3targetTb4b4b4.Te6edf3selectionEndTb4b4b4;
Tff7b72const Te6edf3before Tff7b72= Tff7b72thisTb4b4b4.Te6edf3contentTb4b4b4.Te6edf3substringTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3startTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3after Tff7b72= Tff7b72thisTb4b4b4.Te6edf3contentTb4b4b4.Te6edf3substringTb4b4b4(Te6edf3endTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3content Tff7b72= Ta5d6ff`Tffd700${Te6edf3beforeTffd700}Ta5d6ff Tffd700${Te6edf3afterTffd700}Ta5d6ff`Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3$nextTickTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3targetTb4b4b4.Te6edf3selectionStart Tff7b72= Te6edf3targetTb4b4b4.Te6edf3selectionEnd Tff7b72= Te6edf3start Tff7b72+ T79c0ff2Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────